package com.sophossystems.client.asmon.action;

import java.util.List;

import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
import com.sophossystems.client.asmon.model.PersonaMoral;
import com.sophossystems.client.asmon.service.ClientService;

import org.apache.log4j.Logger;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.core.io.ClassPathResource;
import com.sophossystems.client.asmon.dto.ClientePMoralesDTO;
import com.sophossystems.client.asmon.dto.ClientePersonasFisicasDTO;
import com.sophossystems.client.asmon.exceptions.BusinessException;


public class PersonasMoralesAction extends ActionSupport implements ModelDriven<PersonaMoral>{

	private static final long serialVersionUID = 1L;
	private static Logger logger = Logger.getLogger(PersonasMoralesAction.class);
	private PersonaMoral persona;
    private List<PersonaMoral> listaPersona;
	private ClientService clientService;
//	ClientePMoralesDTO personaMoral = new ClientePMoralesDTO();
	
	/*
	 * variables tabla cliente personas morales
	 */

	private String springRegistro()
	{
		logger.debug("En la context Clientes");
		
		XmlBeanFactory bf = new XmlBeanFactory(new ClassPathResource("applicationContext.xml"));
	    clientService = (ClientService) bf.getBean("clientService");
		return SUCCESS;
		}
	
//registarPersonaMorales
	public String registrarPersonaMorales() throws BusinessException {
		this.springRegistro();    	
		String resultado = "";
		ClientePMoralesDTO clienteRegistrado = null;
    	ClientePMoralesDTO personaMoral = persona.mapper();
    	try {
    		clienteRegistrado = clientService.registarPersonaMoral(personaMoral);
		} catch (Exception e) {
			logger.debug("En la context registarPersonaFisica");
		}
    	if(clienteRegistrado.getCliente().isRegistrado() == false){
    		persona.setRegistrado(true);
			persona.setRfcRegistrado(clienteRegistrado.getCliente().getRfc());
			persona.setRazonSocialRegistrada(clienteRegistrado.getRazonSocial());
    		persona.clean();
			resultado = SUCCESS;

			
		}else{
			persona.clean();
			persona.setYaRegistrado(true);
			persona.setRfcRegistrado(clienteRegistrado.getCliente().getRfc());
			persona.setRazonSocialRegistrada(clienteRegistrado.getRazonSocial());
			persona.unMapper(clienteRegistrado);
			resultado = ERROR;
		}
		return resultado;
    	
	}
	
	
	
	//consultarDetallePersonaMoral
	public String consultarDetallePersonaMoral() {
		this.springRegistro();
		String resultado = "";
		ClientePMoralesDTO detalleClienteRegistrado = new ClientePMoralesDTO();
		ClientePMoralesDTO personaMoral = persona.mapper();
		try {
			detalleClienteRegistrado = clientService.consultarDetallePersonaMoral(personaMoral);
		} catch (Exception e) {
			logger.debug("error al buscar detalle persona fisica Action, causa: " + e.getCause());
		}
		if(detalleClienteRegistrado.getIdClienteGeneral() != 0){
			persona.unMapper(detalleClienteRegistrado);
			resultado = SUCCESS;
		}else{
			resultado = ERROR;
		}
		return resultado;

	}
	
	//modifcarPersonasMorales
	public String modifcarPersonasMorales() {
		this.springRegistro();
		String resultado = null;
		String status = null;
		if(persona.isActualizado() == false){
			persona.setPorActualizar(true);
		}else{
			persona.setPorActualizar(false);
		}
		ClientePMoralesDTO personaMoral = null;
		ClientePMoralesDTO actualizarCliente = null;
		if(persona.isPorActualizar() == true){
			personaMoral = persona.mapper();
			try {
				actualizarCliente = clientService.consultarDetallePersonaMoral(personaMoral);
			} catch (Exception e) {
				logger.error("Error al buscar cliente a actualizar en action, causa: " + e.getCause());
			}
			System.out.println(actualizarCliente.getIdCliente());
			System.out.println(actualizarCliente.getCliente().getIdCliente());
			persona.unMapper(actualizarCliente);
			
			resultado = "input";
		}else{
			System.out.println(persona.getIdDireccionRL());
			personaMoral = persona.mapper();
			System.out.println(personaMoral.getCliente().getRepresentanteLegal().getIdDireccion());
			try {
				status = clientService.modifcarPersonasMorales(personaMoral);
			} catch (Exception e) {
				logger.error("Error al actualizar cliente moral en action, causa: " + e.getCause());
			}
		}
		if(status == "updated"){
			persona.clean();
			persona.setYaRegistrado(false);
			persona.setRegistrado(false);
			persona.setActualizado(true);
			persona.setRfcRegistrado(personaMoral.getCliente().getRfc());
			persona.setRazonSocialRegistrada(personaMoral.getRazonSocial());
			resultado = SUCCESS;
		}else{
			resultado = ERROR;
		}
		
		return resultado;

	}
	
	//borrarPersonaMoral
	public String borrarPersonaMoral() {
		this.springRegistro();
		String resultado = "";
		ClientePMoralesDTO personaMoral = persona.mapper();
		try {
			resultado = clientService.borrarPersonaMoral(personaMoral);
		} catch (Exception e) {
			logger.debug("error al buscar detalle persona fisica Action, causa: " + e.getCause());
		}
		if(resultado == "error"){
			resultado = ERROR;
		}else{
			persona.clean();
			persona.setYaRegistrado(false);
			persona.setRegistrado(false);
			persona.setActualizado(false);
			resultado = SUCCESS;
		}
		return resultado;

	}
	
	public PersonasMoralesAction(){
		persona = new PersonaMoral();
	}
	
	/*public PersonaMoral getPersona() {
		this.springRegistro();
		return persona;
	}


	public void setPersona(PersonaMoral persona) {
		this.springRegistro();
		this.persona = persona;
	}*/		


	public List<PersonaMoral> getListaPersona() {
		return listaPersona;
	}


	public void setListaPersona(List<PersonaMoral> listaPersona) {
		this.listaPersona = listaPersona;
	}

	@Override
	public PersonaMoral getModel() {
		
		return persona;
	}
	
}
